//
//  UserAccountViewModel.swift
//  Weibo10
//
//  Created by zhangbaiqiang on 16/1/8.
//  Copyright © 2016年 itheima. All rights reserved.
//

/*
视图模型,  :
1. 建立用户账户视图模型单例, 唯一管理当前登录用户的账户信息
2. 加载归档保存的用户账户信息,避免重复从沙盒中加载
3. 用户登录判断
4. 抽取网络请求代码
5. 调整网络代码,简化token的调用

*/
/*
如果每次实例化用户账户视图模型, 都从沙盒加载归档保存文件, 效率要低很多, 所以使用单例,值加载归档一次,数据存在内存中;


*/

import UIKit
/// 用户视图模型
class UserAccountViewModel { //不继承NSObject的对象不能使用kvc,因此模型要继承,但是对于封装业务逻辑的视图模型而言,不继承量级更轻,很适合.
 /// 单例
    static let sharedViewModel = UserAccountViewModel()
    
 /// 用户账户类型
    var userAccount: UserAccount?
    
    /// token字典
    var tokenDict:[String: AnyObject]? {
        return isExpired ? nil : ["access_token": userAccount!.access_token!]
    }
    
    /// 用户登录标记 - 计算属性
    var userLogon: Bool {
//        return false
        return (userAccount?.access_token != nil) && !isExpired
    }
    
    //date.compare(NSDate()) 是指定日期与当前系统日期进行比较,如果晚育当前系统日期, 比较结果为降序.
    private var isExpired: Bool {
        if userAccount?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            return false
        }
        return true
    }
    var accessToken: String? {
        
        // 如果 token 没有过期，返回 account.中的 token 属性
        if !isExpired {
            return userAccount?.access_token
        }
        return nil
    }
    
    /**
    *  归档
    */
    private var archivePath: String {
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        return (path as NSString).stringByAppendingPathComponent("account.plist")
    }
    
    ///  从磁盘中解档创建
    ///
    ///  - returns: 用户账户信息
    private init(){ //从磁盘中解档创建
        userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(archivePath) as? UserAccount

        if isExpired {
            userAccount = nil
        }
    }
}
